{-|
Module      : SimFin.Types.Derived
Description : Types to represent SimFin derived figures.
Copyright   : (c) Owen Shepherd, 2022
License     : MIT
Maintainer  : owen@owen.cafe
-}

{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE FlexibleInstances #-}

module SimFin.Types.Derived
  ( DerivedRow(..)
  , DerivedRowsKeyed(..)
  ) where

import Data.Aeson
import Data.Text (Text)
import Data.Time.Calendar (Day)

import SimFin.Types.StringFrac
import SimFin.Types.FiscalPeriod
import SimFin.Internal

-- | Cash flow statement for general companies. 

data DerivedRow a
  = DerivedRow
  { DerivedRow a -> Int
simFinId :: Int
  , DerivedRow a -> Text
ticker :: Text
  , DerivedRow a -> FiscalPeriod
fiscalPeriod :: FiscalPeriod
  , DerivedRow a -> Int
fiscalYear :: Int
  , DerivedRow a -> Day
reportDate :: Day
  , DerivedRow a -> Day
publishDate :: Day
  , DerivedRow a -> Day
restatedDate :: Day
  , DerivedRow a -> Text
source :: Text
  , DerivedRow a -> Bool
tTM :: Bool
  , DerivedRow a -> Bool
valueCheck :: Bool
  , DerivedRow a -> Maybe a
eBITDA :: Maybe a
  , DerivedRow a -> Maybe a
totalDebt :: Maybe a
  , DerivedRow a -> Maybe a
freeCashFlow :: Maybe a
  , DerivedRow a -> Maybe a
grossProfitMargin :: Maybe a
  , DerivedRow a -> Maybe a
operatingMargin :: Maybe a
  , DerivedRow a -> Maybe a
netProfitMargin :: Maybe a
  , DerivedRow a -> Maybe a
returnOnEquity :: Maybe a
  , DerivedRow a -> Maybe a
returnOnAssets :: Maybe a
  , DerivedRow a -> Maybe a
freeCashFlowToNetIncome :: Maybe a
  , DerivedRow a -> Maybe a
currentRatio :: Maybe a
  , DerivedRow a -> Maybe a
liabilitiesToEquityRatio :: Maybe a
  , DerivedRow a -> Maybe a
debtRatio :: Maybe a
  , DerivedRow a -> Maybe a
earningsPerShareBasic :: Maybe a
  , DerivedRow a -> Maybe a
earningsPerShareDiluted :: Maybe a
  , DerivedRow a -> Maybe a
salesPerShare :: Maybe a
  , DerivedRow a -> Maybe a
equityPerShare :: Maybe a
  , DerivedRow a -> Maybe a
freeCashFlowPerShare :: Maybe a
  , DerivedRow a -> Maybe a
dividendsPerShare :: Maybe a
  , DerivedRow a -> Maybe Int
piotroskiFScore :: Maybe Int
  , DerivedRow a -> Maybe a
returnOnInvestedCapital :: Maybe a
  , DerivedRow a -> Maybe a
cashReturnOnInvestedCapital :: Maybe a
  , DerivedRow a -> Maybe a
dividendPayoutRatio :: Maybe a
  , DerivedRow a -> Maybe a
netDebtEBITDA :: Maybe a
  , DerivedRow a -> Maybe a
netDebtEBIT :: Maybe a
  } deriving (a -> DerivedRow b -> DerivedRow a
(a -> b) -> DerivedRow a -> DerivedRow b
(forall a b. (a -> b) -> DerivedRow a -> DerivedRow b)
-> (forall a b. a -> DerivedRow b -> DerivedRow a)
-> Functor DerivedRow
forall a b. a -> DerivedRow b -> DerivedRow a
forall a b. (a -> b) -> DerivedRow a -> DerivedRow b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: a -> DerivedRow b -> DerivedRow a
$c<$ :: forall a b. a -> DerivedRow b -> DerivedRow a
fmap :: (a -> b) -> DerivedRow a -> DerivedRow b
$cfmap :: forall a b. (a -> b) -> DerivedRow a -> DerivedRow b
Functor, Int -> DerivedRow a -> ShowS
[DerivedRow a] -> ShowS
DerivedRow a -> String
(Int -> DerivedRow a -> ShowS)
-> (DerivedRow a -> String)
-> ([DerivedRow a] -> ShowS)
-> Show (DerivedRow a)
forall a. Show a => Int -> DerivedRow a -> ShowS
forall a. Show a => [DerivedRow a] -> ShowS
forall a. Show a => DerivedRow a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DerivedRow a] -> ShowS
$cshowList :: forall a. Show a => [DerivedRow a] -> ShowS
show :: DerivedRow a -> String
$cshow :: forall a. Show a => DerivedRow a -> String
showsPrec :: Int -> DerivedRow a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> DerivedRow a -> ShowS
Show)

instance (Read a, RealFrac a) => FromJSON (DerivedRow a) where
  parseJSON :: Value -> Parser (DerivedRow a)
parseJSON = String
-> (Object -> Parser (DerivedRow a))
-> Value
-> Parser (DerivedRow a)
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"DerivedRow" ((Object -> Parser (DerivedRow a))
 -> Value -> Parser (DerivedRow a))
-> (Object -> Parser (DerivedRow a))
-> Value
-> Parser (DerivedRow a)
forall a b. (a -> b) -> a -> b
$ \Object
v -> (DerivedRow (StringFrac a) -> DerivedRow a)
-> Parser (DerivedRow (StringFrac a)) -> Parser (DerivedRow a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((StringFrac a -> a) -> DerivedRow (StringFrac a) -> DerivedRow a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap StringFrac a -> a
forall a. StringFrac a -> a
unStringFrac) (Parser (DerivedRow (StringFrac a)) -> Parser (DerivedRow a))
-> Parser (DerivedRow (StringFrac a)) -> Parser (DerivedRow a)
forall a b. (a -> b) -> a -> b
$ Int
-> Text
-> FiscalPeriod
-> Int
-> Day
-> Day
-> Day
-> Text
-> Bool
-> Bool
-> Maybe (StringFrac a)
-> Maybe (StringFrac a)
-> Maybe (StringFrac a)
-> Maybe (StringFrac a)
-> Maybe (StringFrac a)
-> Maybe (StringFrac a)
-> Maybe (StringFrac a)
-> Maybe (StringFrac a)
-> Maybe (StringFrac a)
-> Maybe (StringFrac a)
-> Maybe (StringFrac a)
-> Maybe (StringFrac a)
-> Maybe (StringFrac a)
-> Maybe (StringFrac a)
-> Maybe (StringFrac a)
-> Maybe (StringFrac a)
-> Maybe (StringFrac a)
-> Maybe (StringFrac a)
-> Maybe Int
-> Maybe (StringFrac a)
-> Maybe (StringFrac a)
-> Maybe (StringFrac a)
-> Maybe (StringFrac a)
-> Maybe (StringFrac a)
-> DerivedRow (StringFrac a)
forall a.
Int
-> Text
-> FiscalPeriod
-> Int
-> Day
-> Day
-> Day
-> Text
-> Bool
-> Bool
-> Maybe a
-> Maybe a
-> Maybe a
-> Maybe a
-> Maybe a
-> Maybe a
-> Maybe a
-> Maybe a
-> Maybe a
-> Maybe a
-> Maybe a
-> Maybe a
-> Maybe a
-> Maybe a
-> Maybe a
-> Maybe a
-> Maybe a
-> Maybe a
-> Maybe Int
-> Maybe a
-> Maybe a
-> Maybe a
-> Maybe a
-> Maybe a
-> DerivedRow a
DerivedRow
    (Int
 -> Text
 -> FiscalPeriod
 -> Int
 -> Day
 -> Day
 -> Day
 -> Text
 -> Bool
 -> Bool
 -> Maybe (StringFrac a)
 -> Maybe (StringFrac a)
 -> Maybe (StringFrac a)
 -> Maybe (StringFrac a)
 -> Maybe (StringFrac a)
 -> Maybe (StringFrac a)
 -> Maybe (StringFrac a)
 -> Maybe (StringFrac a)
 -> Maybe (StringFrac a)
 -> Maybe (StringFrac a)
 -> Maybe (StringFrac a)
 -> Maybe (StringFrac a)
 -> Maybe (StringFrac a)
 -> Maybe (StringFrac a)
 -> Maybe (StringFrac a)
 -> Maybe (StringFrac a)
 -> Maybe (StringFrac a)
 -> Maybe (StringFrac a)
 -> Maybe Int
 -> Maybe (StringFrac a)
 -> Maybe (StringFrac a)
 -> Maybe (StringFrac a)
 -> Maybe (StringFrac a)
 -> Maybe (StringFrac a)
 -> DerivedRow (StringFrac a))
-> Parser Int
-> Parser
     (Text
      -> FiscalPeriod
      -> Int
      -> Day
      -> Day
      -> Day
      -> Text
      -> Bool
      -> Bool
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v Object -> Text -> Parser Int
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"SimFinId"
    Parser
  (Text
   -> FiscalPeriod
   -> Int
   -> Day
   -> Day
   -> Day
   -> Text
   -> Bool
   -> Bool
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser Text
-> Parser
     (FiscalPeriod
      -> Int
      -> Day
      -> Day
      -> Day
      -> Text
      -> Bool
      -> Bool
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Ticker"
    Parser
  (FiscalPeriod
   -> Int
   -> Day
   -> Day
   -> Day
   -> Text
   -> Bool
   -> Bool
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser FiscalPeriod
-> Parser
     (Int
      -> Day
      -> Day
      -> Day
      -> Text
      -> Bool
      -> Bool
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser FiscalPeriod
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Fiscal Period"
    Parser
  (Int
   -> Day
   -> Day
   -> Day
   -> Text
   -> Bool
   -> Bool
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser Int
-> Parser
     (Day
      -> Day
      -> Day
      -> Text
      -> Bool
      -> Bool
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser Int
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Fiscal Year"
    Parser
  (Day
   -> Day
   -> Day
   -> Text
   -> Bool
   -> Bool
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser Day
-> Parser
     (Day
      -> Day
      -> Text
      -> Bool
      -> Bool
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser Day
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Report Date"
    Parser
  (Day
   -> Day
   -> Text
   -> Bool
   -> Bool
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser Day
-> Parser
     (Day
      -> Text
      -> Bool
      -> Bool
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser Day
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Publish Date"
    Parser
  (Day
   -> Text
   -> Bool
   -> Bool
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser Day
-> Parser
     (Text
      -> Bool
      -> Bool
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser Day
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Restated Date"
    Parser
  (Text
   -> Bool
   -> Bool
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser Text
-> Parser
     (Bool
      -> Bool
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Source"
    Parser
  (Bool
   -> Bool
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser Bool
-> Parser
     (Bool
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser Bool
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"TTM"
    Parser
  (Bool
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser Bool
-> Parser
     (Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser Bool
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Value Check"
    Parser
  (Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser (Maybe (StringFrac a))
-> Parser
     (Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe (StringFrac a))
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"EBITDA"
    Parser
  (Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser (Maybe (StringFrac a))
-> Parser
     (Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe (StringFrac a))
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Total Debt"
    Parser
  (Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser (Maybe (StringFrac a))
-> Parser
     (Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe (StringFrac a))
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Free Cash Flow"
    Parser
  (Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser (Maybe (StringFrac a))
-> Parser
     (Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe (StringFrac a))
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Gross Profit Margin"
    Parser
  (Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser (Maybe (StringFrac a))
-> Parser
     (Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe (StringFrac a))
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Operating Margin"
    Parser
  (Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser (Maybe (StringFrac a))
-> Parser
     (Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe (StringFrac a))
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Net Profit Margin"
    Parser
  (Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser (Maybe (StringFrac a))
-> Parser
     (Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe (StringFrac a))
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Return on Equity"
    Parser
  (Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser (Maybe (StringFrac a))
-> Parser
     (Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe (StringFrac a))
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Return on Assets"
    Parser
  (Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser (Maybe (StringFrac a))
-> Parser
     (Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe (StringFrac a))
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Free Cash Flow to Net Income"
    Parser
  (Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser (Maybe (StringFrac a))
-> Parser
     (Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe (StringFrac a))
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Current Ratio"
    Parser
  (Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser (Maybe (StringFrac a))
-> Parser
     (Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe (StringFrac a))
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Liabilities to Equity Ratio"
    Parser
  (Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser (Maybe (StringFrac a))
-> Parser
     (Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe (StringFrac a))
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Debt Ratio"
    Parser
  (Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser (Maybe (StringFrac a))
-> Parser
     (Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe (StringFrac a))
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Earnings Per Share, Basic"
    Parser
  (Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser (Maybe (StringFrac a))
-> Parser
     (Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe (StringFrac a))
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Earnings Per Share, Diluted"
    Parser
  (Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser (Maybe (StringFrac a))
-> Parser
     (Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe (StringFrac a))
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Sales Per Share"
    Parser
  (Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser (Maybe (StringFrac a))
-> Parser
     (Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe (StringFrac a))
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Equity Per Share"
    Parser
  (Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser (Maybe (StringFrac a))
-> Parser
     (Maybe (StringFrac a)
      -> Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe (StringFrac a))
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Free Cash Flow Per Share"
    Parser
  (Maybe (StringFrac a)
   -> Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser (Maybe (StringFrac a))
-> Parser
     (Maybe Int
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe (StringFrac a))
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Dividends Per Share"
    Parser
  (Maybe Int
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser (Maybe Int)
-> Parser
     (Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe Int)
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Piotroski F-Score"
    Parser
  (Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser (Maybe (StringFrac a))
-> Parser
     (Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe (StringFrac a))
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Return On Invested Capital"
    Parser
  (Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser (Maybe (StringFrac a))
-> Parser
     (Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> Maybe (StringFrac a)
      -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe (StringFrac a))
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Cash Return On Invested Capital"
    Parser
  (Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> Maybe (StringFrac a)
   -> DerivedRow (StringFrac a))
-> Parser (Maybe (StringFrac a))
-> Parser
     (Maybe (StringFrac a)
      -> Maybe (StringFrac a) -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe (StringFrac a))
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Dividend Payout Ratio"
    Parser
  (Maybe (StringFrac a)
   -> Maybe (StringFrac a) -> DerivedRow (StringFrac a))
-> Parser (Maybe (StringFrac a))
-> Parser (Maybe (StringFrac a) -> DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe (StringFrac a))
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Net Debt / EBITDA"
    Parser (Maybe (StringFrac a) -> DerivedRow (StringFrac a))
-> Parser (Maybe (StringFrac a))
-> Parser (DerivedRow (StringFrac a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Text -> Parser (Maybe (StringFrac a))
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Net Debt / EBIT"

-- | Wrapper to parse a DerivedRow record from SimFin's JSON format.

newtype DerivedRowsKeyed a = DerivedRowsKeyed { DerivedRowsKeyed a -> [DerivedRow a]
unDerivedRows :: [DerivedRow a] }

instance (Read a, RealFrac a) => FromJSON (DerivedRowsKeyed a) where
  parseJSON :: Value -> Parser (DerivedRowsKeyed a)
parseJSON Value
o = ([DerivedRow a] -> DerivedRowsKeyed a)
-> Parser [DerivedRow a] -> Parser (DerivedRowsKeyed a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [DerivedRow a] -> DerivedRowsKeyed a
forall a. [DerivedRow a] -> DerivedRowsKeyed a
DerivedRowsKeyed (Parser [DerivedRow a] -> Parser (DerivedRowsKeyed a))
-> Parser [DerivedRow a] -> Parser (DerivedRowsKeyed a)
forall a b. (a -> b) -> a -> b
$ (Value -> Parser (DerivedRow a))
-> [Value] -> Parser [DerivedRow a]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse Value -> Parser (DerivedRow a)
forall a. FromJSON a => Value -> Parser a
parseJSON ([Value] -> Parser [DerivedRow a])
-> Parser [Value] -> Parser [DerivedRow a]
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Value -> Parser [Value]
createKeyedRows Value
o