🍴 Meu Garfo é uma visualização em grafo dos CNPJs
cuducos.tngl.io/meu-garfo
1module Types exposing (..)
2
3import Browser
4import Browser.Navigation as Nav
5import Dict exposing (Dict)
6import Force
7import Http
8import Set exposing (Set)
9import Url exposing (Url)
10
11
12type Tab
13 = CnpjTab
14 | ConnectionTab
15
16
17type CompanyStatus
18 = StatusLoading
19 | StatusActive
20 | StatusInactive
21 | StatusUnknown
22
23
24type Entity
25 = Company String String CompanyStatus -- Nome, CNPJ, situação cadastral
26 | Person String (Maybe String) -- Nome, CPF
27
28
29type alias Node =
30 { id : String
31 , entity : Entity
32 , depth : Int
33 , x : Float
34 , y : Float
35 , vx : Float
36 , vy : Float
37 , error : Maybe String
38 }
39
40
41type ApiError
42 = NotFound
43 | BadRequest String
44 | HttpError Http.Error
45
46
47type QueryType
48 = EntityQuery String
49 | ConnectionQuery String String
50
51
52type alias QueryRequest =
53 { term : String
54 , depth : Int
55 , queryType : QueryType
56 }
57
58
59type alias QueryKey =
60 ( String, String )
61
62
63type alias Model =
64 { input : String
65 , connectionInput1 : String
66 , connectionInput2 : String
67 , activeTab : Tab
68 , nodes : Dict String Node
69 , edges : Set ( String, String )
70 , visited : Set QueryKey
71 , pending : Set QueryKey
72 , queryQueue : List QueryRequest
73 , currentQueries : List QueryRequest
74 , error : Maybe String
75 , simulation : Force.State String
76 , width : Float
77 , height : Float
78 , graphApi : String
79 , jsonApi : String
80 , dragNode : Maybe String
81 , startPos : Maybe { x : Float, y : Float } -- To detect click vs drag
82 , isPanning : Bool
83 , zoom : Float
84 , pan : { x : Float, y : Float }
85 , navKey : Nav.Key
86 , url : Url
87 , manyBody : Float
88 , collisionRadius : Float
89 , linkDistance : Float
90 , isInitialSearch : Bool
91 }
92
93
94type Msg
95 = UpdateInput String
96 | UpdateConnectionInput1 String
97 | UpdateConnectionInput2 String
98 | SwitchTab Tab
99 | Search
100 | Clear
101 | NodeClicked String
102 | GotResponse String String Int (Result ApiError ApiResponse)
103 | GotCompanyName String String (Result Http.Error CompanyInfo)
104 | Tick
105 | Resize Float Float
106 | InteractionStart String Float Float
107 | PanStart
108 | InteractionMove Float Float
109 | InteractionEnd Float Float -- Pass current mouse pos to detect click
110 | Zoom Float
111 | LinkClicked Browser.UrlRequest
112 | UrlChanged Url
113
114
115type alias CompanyInfo =
116 { name : String
117 , situacaoCadastral : Maybe Int
118 }
119
120
121type alias ApiResponse =
122 List Relation
123
124
125type alias Relation =
126 { cnpj : String
127 , razaoSocial : String
128 , partnerId : String
129 , partnerName : Maybe String
130 , partnerCpf : Maybe String
131 }